package com.wen.controller;

import com.wen.bean.UserInfoBean;
import com.wen.service.IUserService;
import com.wen.utils.MyUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import java.util.List;

@Controller
public class UserAjaxController {
    // 依赖注入

    @Resource
    private IUserService userService;

    @ResponseBody
    @RequestMapping("/queryUserInfoById")
    public UserInfoBean queryUserInfoById(Integer userId) {
        //使用文件上传的公共方法，进行文件上传处理
       return userService.queryUserInfoById(userId);
    }

    /**
     * 按条件查找
     *
     * @param userInfoBean 实体类
     * @return 查询集合
     */
    @RequestMapping("/queryByParams")
    public ResponseEntity<List<UserInfoBean>> queryUserInfoByParams(UserInfoBean userInfoBean) {

        // ajax请求返回的是ajax内容串；
        // 普通的请求返回的是视图名【区别】
        List<UserInfoBean> userInfoBeans = userService.selectUserinfoByParams(userInfoBean);
        //List<UserInfoBean> userInfoBeans = userService.userQueryAll();
        // 直接返回结果集即可，springmvc框架会自动将结果集转换为json字符串，但是需要在springmvc的配置文件中进行相关配置
        // return ResponseEntity.status(HttpStatus.OK).body(userInfoBeans);
        //return ResponseEntity.ok(userInfoBeans);
        return new ResponseEntity<>(userInfoBeans, HttpStatus.OK);
    }
    /**
     * Ajax查找
     * @param userInfoBean 实体类
     * @return 查询集合
     */
    @ResponseBody
    @RequestMapping("/ajaxQueryByParams")
    public String queryUserInfoByParams(UserInfoBean userInfoBean, @RequestParam("file_userimg") MultipartFile multipartFile) {
        //使用文件上传的公共方法，进行文件上传处理
        MyUtils.doFileUpload(multipartFile, "uploadFiles", "userImg", userInfoBean, "userimg");
        System.out.println(multipartFile.getOriginalFilename());
        System.out.println(userInfoBean);
        // ajax请求返回的是ajax内容串；
        int i = userService.addAndUpdateUserInfo(userInfoBean);
        if (i > 0){
            //保存成功
            return "ok";
        }else {
            return "ng";
        }
    }
    /**
     * 物理删除
     * @param userId 记录id
     * @return 查询集合
     */
    @ResponseBody
    @RequestMapping("/deleteUserInfoById")
    public String deleteUserInfoById(Integer userId) {
        //使用文件上传的公共方法，进行文件上传处理
        // ajax请求返回的是ajax内容串；
        int i = userService.deleteUserInfoById(userId);
        if (i > 0){
            //保存成功
            return "ok";
        }else {
            return "ng";
        }
    }

    /**
     * 逻辑删除
     * @param userId 记录id
     * @return 查询集合
     */
    @ResponseBody
    @RequestMapping("/logicDeleteUserInfoById")
    public String logicDeleteUserInfoById(Integer userId) {
        // ajax请求返回的是ajax内容串；
        int i = userService.logicDeleteUserInfoById(userId);
        if (i > 0){
            //保存成功
            return "ok";
        }else {
            return "ng";
        }
    }
    // @ResponseBody 该注解表示这个handler方法是按照ajax的处理流程进行处理，而不需要跳转视图解析进行处理



    /**
     * 通过后台进行跳转处理
     *
     * @param pg 跳转的视图名字
     * @return 目标视图名
     */
    @RequestMapping("/jump")
    public String Jump(String pg) {
        return pg;
    }

    //登录验证

    @RequestMapping("/login")
    public ModelAndView doLogin3(UserInfoBean userInfo) {
        //创建一个返回对象
        ModelAndView mav = new ModelAndView();

        System.out.println("正在进行登录操作:" + userInfo.getUsername() + ";密码：" + userInfo.getUserpsw());
        // 调用service层进行业务逻辑处理
        boolean canLogin = userService.doLogin(userInfo);
        // 根据查询结果集进行跳转
        if (canLogin) {
            // 登录成功
            // 返回的视图的路径：WEB-INF/pages/logined.jsp
            // 通过springmvc的视图解析器：会自动附加 前缀 /WEB-INF/pages/ 和后缀 .jsp，所以只需要返回中间部分即可；
            // 设置返回返回的视图的名字
            mav.setViewName("logined");
            // 使用Model进行数据缓存
            System.out.println("输出缓存的数据：" + userInfo.getUsername());
            mav.addObject("userLoginedName", userInfo.getUsername());
        } else {
            // 登录失败，跳回登录页面
            mav.setViewName("../../index");
        }
        return mav;
    }

    public IUserService getUserService() {
        return userService;
    }

    public void setUserService(IUserService userService) {
        this.userService = userService;
    }
}
